package com.dyzx.hbb.modules.finance.controller;

import com.dyzx.hbb.common.base.Result;
import com.dyzx.hbb.common.config.MyLambdaQueryWrapper;
import com.dyzx.hbb.common.controller.BaseController;
import com.dyzx.hbb.modules.finance.entity.FinanceCategory;
import com.dyzx.hbb.modules.finance.query.FinanceCategoryQuery;
import com.dyzx.hbb.modules.finance.service.FinanceCategoryService;
import com.dyzx.hbb.modules.finance.vo.FinanceCategoryUVO;
import com.dyzx.hbb.modules.finance.vo.FinanceCategoryVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * 财务分类控制器
 * <p>处理财务系统中的分类管理和查询操作
 * <p>主要职责：
 * <ul>
 * <li>提供财务分类的基础CRUD接口</li>
 * <li>实现财务分类的简易列表查询功能</li>
 * <li>支持按ID、名称、图标和颜色等属性查询</li>
 * </ul>
 * <p>设计意图：为财务管理模块提供统一的分类管理功能，
 * 便于财务数据的分类统计和展示
 * 
 * @author 开发团队
 * @version 1.0.0
 * @since 2023-05-30
 */
@RestController
@RequestMapping("/finance/category")
@Tag(name = "13.财务分类", description = "财务分类管理接口，包括分类的查询等操作")
public class FinanceCategoryController  extends BaseController<FinanceCategoryService, FinanceCategory, FinanceCategoryQuery, FinanceCategoryVO, FinanceCategoryUVO>{
    @Autowired
  private   FinanceCategoryService service;
    /**
     * 获取基础服务类
     * @return FinanceCategoryService实例
     */
    @Override
    protected FinanceCategoryService getBaseService() {
        return service;
    }

    /**
     * 构建查询条件包装器
     * @param query 查询参数
     * @return 查询条件包装器
     */
    @Override
    protected MyLambdaQueryWrapper<FinanceCategory> queryWrapper(FinanceCategoryQuery query) {
        return null;
    }

    /**
     * 构建详情查询条件包装器
     * @return 详情查询条件包装器
     */
    @Override
    protected MyLambdaQueryWrapper<FinanceCategory> queryInfoWrapper() {
        return null;
    }

    /**
     * 获取财务分类简易列表
     * @return 财务分类简易列表，包含ID、名称、图标和颜色
     */
    @GetMapping("/mini_list")
    @Operation(summary = "获取财务分类简易列表", description = "获取所有财务分类的简易信息，包含ID、名称、图标和颜色，用于下拉选择")
    public Result<List<Map<String, Object>>> miniList() {
        MyLambdaQueryWrapper<FinanceCategory> wrapper = new MyLambdaQueryWrapper<>();
        wrapper.select(FinanceCategory::getId, FinanceCategory::getName);
        wrapper.select(FinanceCategory::getName).as("label");
        wrapper.select(FinanceCategory::getId).as("value");
        wrapper.select(FinanceCategory::getIcon).as("icon");
        wrapper.select(FinanceCategory::getColor).as("color");
        wrapper.orderByDesc(FinanceCategory::getId);


        List<Map<String, Object>> list = getBaseService().listMaps(wrapper);
        return list.isEmpty() ? Result.error(404, "暂无数据") : Result.ok(list);
    }
}
